# Поиск элементов при помощи XPath
# Когда возникает ситуация, где нам сложно найти уникальный CSS-селектор для нужного элемента, XPath
# становится отличной альтернативой. Этот метод позволяет искать элементы по их пути в дереве HTML-документа.

# XPath — это мощный и гибкий инструмент, но при этом потенциально рискованный.
#
# Во-первых, с XPath можно составлять крайне сложные запросы для поиска элементов, что дает большую гибкость.
# Во-вторых, если разработчик веб-сайта решит изменить структуру страницы, ваш парсер может сломаться, и искомый
# элемент будет утерян.

# Также стоит отметить, что XPath использует древовидную структуру документа для поиска элементов. Проверить
# XPath-запрос можно так же, как и CSS-селекторы — через консоль разработчика в вашем браузере.

# . XPath всегда начинается с символа / или //
#
# Символ / аналогичен символу > в CSS-селекторах, а символ // — пробелу в CSS.
#
# element1/element2 — выбирает элементы element2, которые являются прямыми потомками element1.
# element1//element2 — выбирает элементы element2, которые являются потомками element1 на любом уровне вложенности.

# Важная особенность: если начать XPath-запрос с символа /, корнем запроса всегда будет элемент с тегом <html>.
# Пример: /html/body/header.
#
# Если же запрос начинается с //, это означает, что нужно найти все потомки корневого элемента, без уточнения, кто
# является корнем. Так, если нужно найти хедер, можно просто использовать //header, предполагая, что других элементов
# с таким названием на странице нет.
#//article/header/h2[text()='Подзаголовок в Статье']


#Этот XPath-запрос делает следующее:

# //article - ищет все элементы article на странице, начиная с корневого элемента и далее по всему дереву.
# /header - переходит к непосредственному дочернему элементу header каждого найденного article.
# /h2 - переходит к непосредственному дочернему элементу h2 каждого найденного header.
# [text()='Подзаголовок в Статье'] - фильтрует элементы h2 по их текстовому содержимому, оставляя только те,
# которые имеют текст "Подзаголовок в Статье".


# 2. [ ] - Команда для фильтрации элементов.
#
# Когда по запросу найдено несколько элементов, XPath позволяет произвести фильтрацию согласно правилам,
# указанным в квадратных скобках [ ].
#
# Правил фильтрации очень много:

# По атрибутам: Фильтрация может быть произведена по любому атрибуту, такому как id, class, title и так далее.
# Например, если вы хотите найти ссылку с определенным id, запрос будет выглядеть следующим образом: //a[@id='a_back'].
# Здесь @ указывает на атрибут, а 'a_back' — это значение атрибута id, которое нам нужно

#
# По порядковому номеру: Эта возможность особенно полезна, если у вас есть список элементов, и вы хотите выбрать
# определенный по порядку. Например, чтобы выбрать пятый элемент li внутри ul, можно использовать запрос //ul/li[5].
# В этом случае [5] указывает на то, что мы хотим взять именно пятый дочерний элемент.


# По полному совпадению текста: Если требуется найти элемент по точному текстовому содержанию, XPath является вашим
# единственным выбором. Применение данного метода хорошо иллюстрирует пример с поиском кнопки "Купить" при помощи
# XPath-селектора //button[text()="Купить"]. Стоит отметить, что такой запрос вернет элемент только в случае полного
# совпадения текста. И хотя этот метод может быть весьма эффективным, его использование не всегда является лучшей
# практикой, особенно если речь идет о мультиязычных сайтах.
















